home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Error.C < prev    next >
C/C++ Source or Header  |  1992-05-21  |  2KB  |  116 lines

  1. #ifdef __GNUG__
  2. #pragma implementation
  3. #endif
  4.  
  5. #include "Error.h"
  6.  
  7. #include "String.h"
  8. #include "System.h"
  9. #include "Env.h"
  10.  
  11. static ErrorHandlerFunc errorhandler= DefaultErrorHandler;
  12.  
  13. ErrorHandlerFunc SetErrorHandler(ErrorHandlerFunc newhandler)
  14. {
  15.     ErrorHandlerFunc oldhandler= errorhandler;
  16.     errorhandler= newhandler;
  17.     return oldhandler;
  18. }
  19.  
  20. ErrorHandlerFunc GetErrorHandler()
  21. {
  22.     return errorhandler;
  23. }  
  24.  
  25. void AbstractMethod(char *s)
  26. {
  27.     Warning(s, "abstract method called");
  28. }
  29.  
  30. void MayNotUse(char *s)
  31. {
  32.     Warning(s, "may not use");
  33. }
  34.  
  35. void DefaultErrorHandler(int level, bool abort, char *location, char *msg)
  36. {
  37.     char *type= "Warning";
  38.     if (level < Env::GetValue("System.IgnoreLevel", cError))
  39.     return;
  40.     if (level >= cFatal)
  41.     type= "Fatal";
  42.     else if (level >= cSysError)
  43.     type= "SysError";
  44.     else if (level >= cError)
  45.     type= "Error";
  46.       
  47.     fprintf (stderr, "%s in <%s>: %s\n", type, location, msg);
  48.     fflush (stderr);
  49.     if (abort) {
  50.     fprintf (stderr, "aborting\n");
  51.     fflush (stderr);
  52.     gSystem->Abort();
  53.     }
  54. }
  55.  
  56. void ErrorHandler(int level, char *location, char *fmt, va_list ap)
  57. {
  58.     char buf[1024], *bp;
  59.     
  60.     vsprintf(buf, fmt, ap);
  61.     if (level >= cSysError && level < cFatal)
  62.     bp= form("%s (%s)", buf, gSystem->GetError());
  63.     else
  64.     bp= buf;
  65.     errorhandler(level, level >= Env::GetValue("System.AbortLevel", cSysError), location, bp);
  66. }
  67.  
  68. void Error(char *location, char *va_(fmt), ...)
  69. {
  70.     va_list ap;
  71.     va_start(ap,va_(fmt));
  72.     ErrorHandler(cError, location, va_(fmt), ap);
  73.     va_end(ap);
  74. }
  75.  
  76. void SysError(char *location,  char *va_(fmt), ...)
  77. {
  78.     va_list ap;
  79.     va_start(ap, va_(fmt));
  80.     ErrorHandler(cSysError, location, va_(fmt), ap);
  81.     va_end(ap);
  82. }
  83.  
  84. void Warning(char *location, char *va_(fmt), ...)
  85. {
  86.     va_list ap;
  87.     va_start(ap,va_(fmt));
  88.     ErrorHandler(cWarning, location, va_(fmt), ap);
  89.     va_end(ap);
  90. }
  91.  
  92. void Fatal(char *location, char *va_(fmt), ...)
  93. {
  94.     va_list ap;
  95.     va_start(ap,va_(fmt));
  96.     ErrorHandler(cFatal, location, va_(fmt), ap);
  97.     va_end(ap);
  98. }
  99.  
  100. static int gAssertLevel= -1;
  101.  
  102. int GetAssertLevel()
  103. {
  104.     if (gAssertLevel == -1)
  105.     gAssertLevel= Env::GetValue("System.AssertLevel", cMaxInt);
  106.     return gAssertLevel;
  107. }
  108.  
  109. int SetAssertLevel(int l)
  110. {
  111.     int old= gAssertLevel;
  112.     gAssertLevel= l;
  113.     return old;
  114. }
  115.  
  116.